import { CustomRequestOptions } from "@/interceptors/request";
import { showToast } from ".";
import { useToastStore } from "@/store";

export const http = <T>(options: CustomRequestOptions) => {
	const toastStore = useToastStore();

	// 1. 返回 Promise 对象
	return new Promise<IResData<T>>((resolve, reject) => {
		uni.request({
			...options,
			dataType: "json",
			// #ifndef MP-WEIXIN
			responseType: "json",
			// #endif
			// 响应成功
			success(res) {
				const rs = res.data;
				console.log(rs);

				if (rs.code === 0) {
					// 2.1 提取核心数据 res.data
					resolve(rs.data);
				} else if (rs.code === 401) {
					// 401错误  -> 清理用户信息，跳转到登录页
					// userStore.clearUserInfo()
					// uni.navigateTo({ url: '/pages/login/login' })
					reject(res);
				} else {
					// 其他错误 -> 根据后端错误信息轻提示
					toastStore.set(rs.msg || "请求错误", "error");
					// showToast(rs.msg || "请求错误");

					reject(rs);
				}
			},
			// 响应失败
			fail(err) {
				uni.showToast({
					icon: "none",
					title: "网络错误，换个网络试试",
				});
				reject(err);
			},
		});
	});
};

/**
 * GET 请求
 * @param url 后台地址
 * @param query 请求query参数
 * @returns
 */
export const httpGet = <T>(url: string, query?: Record<string, any>) => {
	return http<T>({
		url,
		query,
		method: "GET",
	});
};

/**
 * POST 请求
 * @param url 后台地址
 * @param data 请求body参数
 * @param query 请求query参数，post请求也支持query，很多微信接口都需要
 * @returns
 */
export const httpPost = <T>(
	url: string,
	data?: Record<string, any>,
	query?: Record<string, any>,
) => {
	return http<T>({
		url,
		query,
		data,
		method: "POST",
	});
};

/**
 * PUT 请求
 * @param url 后台地址
 * @param data 请求body参数
 * @param query 请求query参数，post请求也支持query，很多微信接口都需要
 * @returns
 */
export const httpPut = <T>(
	url: string,
	data?: Record<string, any>,
	query?: Record<string, any>,
) => {
	return http<T>({
		url,
		query,
		data,
		method: "PUT",
	});
};

http.get = httpGet;
http.post = httpPost;
http.put = httpPut;
